package org.example.demo;

import javax.swing.*;
import java.awt.*;

public class DynamicLayoutDemo {
    private static JFrame frame;
    private static JPanel mainPanel;

    public static void main(String[] args) {
        frame = new JFrame("布局热重载演示");
        frame.setSize(600, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // 初始化布局容器
        reloadLayout(new BorderLayout()); // 默认布局
        
        frame.setVisible(true);
    }

    // 核心方法：动态重载布局
    public static void reloadLayout(LayoutManager newLayout) {
        if (mainPanel != null) {
            frame.remove(mainPanel); // 移除旧容器
        }
        
        mainPanel = new JPanel(newLayout);
        populateComponents(); // 填充组件
        frame.add(mainPanel);
        
        refreshUI();
    }

    // 组件初始化逻辑（隔离高频修改部分）
    private static void populateComponents() {
        mainPanel.add(new JButton("North"), BorderLayout.NORTH);
        mainPanel.add(new JButton("North2"), BorderLayout.EAST);
        mainPanel.add(new JTextArea("Center"), BorderLayout.CENTER);
        // 修改组件属性后触发热替换
    }

    // 强制UI刷新
    private static void refreshUI() {
        SwingUtilities.invokeLater(() -> {
            frame.revalidate();
            frame.repaint();
        });
    }
}
